package com.yoyo.itravel.service;

import com.yoyo.itravel.bean.PageBean;
import com.yoyo.itravel.bean.Sight;
import com.yoyo.itravel.exceptions.SightException;

import java.util.List;

/**
 * @Description 景点操作服务层接口
 *
 * @author HZX
 * @date 2020/5/9 13:29
 */
public interface ISightService {

    /**
     * @Description 新增景点
     *
     * @param sight
     * @param imageUrls 景点详情图片url
     * @param themeIds 景点主题id
     * @return boolean
     */
    boolean addSight(Sight sight, List<String> imageUrls, List<String> themeIds) throws SightException;

    /**
     * @Description 根据条件查询景点
     *
     * @param themeId
     * @param provinceId
     * @param cityId
     * @return java.util.List<cn.hut.travel.bean.Sight>
     */
    List<Sight> findSightByCondition(String themeId, String provinceId, String cityId) throws SightException;

    /**
     * @Description 根据条件分页查询景点信息
     *
     * @param themeId
     * @param provinceId
     * @param cityId
     * @param currentPage
     * @param pageSize
     * @param search 查询条件--输入框查询
     * @return PageBean<Sight>
     */
    PageBean<Sight> queryCurrentPageByCondition(String themeId, String provinceId, String cityId, int currentPage, int pageSize, String search, String lowPrice, String heightPrice) throws SightException;

    /**
     * @Description 根据条件获得查询的景点数据条数
     *
     * @param themeId
     * @param provinceId
     * @param cityId
     * @param search
     * @return int
     */
    int selectCountByCondition(String themeId, String provinceId, String cityId, String search) throws SightException;

    /**
     * @Description 通过景点id查询景点
     *
     * @param sightId
     * @return cn.hut.travel.bean.Sight
     */
    Sight findSightBySightId(String sightId) throws SightException;

    /**
     * @Description 通过景点id更新景点门票销量
     *
     * @param sightId
     * @param count
     * @return boolean
     */
    boolean updateSellCount(String sightId, Integer count) throws SightException;

    /**
     * @Description 通过景点id更新景点被收藏的次数
     *
     * @param sightId
     * @param isAdd  true:加1   false:减1
     * @return boolean
     */
    boolean updateCollectCount(String sightId, boolean isAdd) throws SightException;

    /**
     * @Description 查找销量最高的景点--注意：由于使用了Map集合，所以会使得逆序排序的数据，变为无序，这里要使用Map的子类LinkHashMap
     *
     * @param size
     * @return java.util.List<cn.hut.travel.bean.Sight>
     */
    List<Sight> findSellestSight(Integer size) throws SightException;

    /**
     * @Description 分页查询所有景点
     *
     * @param page
     * @return cn.hut.travel.bean.PageBean<cn.hut.travel.bean.Sight>
     */
    List<Sight> findAllByPage(PageBean page) throws SightException;

    /**
     * @Description 查找用户收藏量最高的景点--注意：由于使用了Map集合，所以会使得逆序排序的数据，变为无序，这里要使用Map的子类LinkHashMap
     *
     * @param size
     * @return java.util.List<cn.hut.travel.bean.Sight>
     */
    List<Sight> findCollectestSight(Integer size) throws SightException;

    /**
     * @Description 查询景点数据的总条数
     *
     * @Param
     * @Return java.lang.Integer
     */
    Integer findTotalCount() throws SightException;

    /**
     * @Description 通过景点id修改景点的在售状态
     *
     * @Param sightId
     * @Param newStatus
     * @Return boolean
     */
    boolean updateOnSellStatusById(String sightId, Integer newStatus) throws SightException;

    /**
     * @Description 通过景点id和主题id删除景点主题
     *
     * @Param sightId
     * @Param themeId
     * @Return boolean
     */
    boolean deleteSightTheme(String sightId, String themeId) throws SightException;

    /**
     * @Description 通过景点id删除景点
     *
     * @Param sightId
     * @Return boolean
     */
    boolean deleteSight(String sightId) throws SightException;

    /**
     * @Description 通过id批量删除景点
     *
     * @Param ids
     * @Return boolean
     */
    boolean deleteBatch(String[] ids) throws SightException;
}
